ํธ๋ฒ ๋ฐ ํฌ์ปค์ค ์ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ์ฑ ์๋ ํดํ์ ๊ตฌํํ๋ ์ข ํฉ ๊ฐ์ด๋. ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ํฌํจํ ๋ชจ๋ ์ฌ์ฉ์์ ์ฌ์ฉ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
ํดํ ๊ตฌํ: ํธ๋ฒ(Hover) ๋ฐ ํฌ์ปค์ค(Focus)๋ฅผ ์ด์ฉํ ์ ๊ทผ์ฑ ์๋ ์ ๋ณด ์ ๊ณต
ํดํ์ ์ฌ์ฉ์๊ฐ ์์ ์๋ก ๋ง์ฐ์ค ํฌ์ธํฐ๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋(hover) ํฌ์ปค์ค(focus)ํ ๋ ๋ํ๋๋ ์์ ์ํฉ๋ณ ๋์๋ง ๋ฉ์์ง์ ๋๋ค. ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ์์์ ๋ชฉ์ ์ ๋ช ํํ ํ๊ฑฐ๋, ๊ธฐ๋ฅ ์ฌ์ฉ๋ฒ์ ๋ํ ํํธ๋ฅผ ์ค ์ ์์ต๋๋ค. ํ์ง๋ง ํดํ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์ง ์์ผ๋ฉด ์ฝ๊ฒ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ฅผ ํฌํจํ ๋ชจ๋ ์ฌ๋์ด ์ฌ์ฉํ ์ ์๋ ํดํ์ ๋ง๋๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค๋ช ํฉ๋๋ค.
ํดํ์์ ์ ๊ทผ์ฑ์ด ์ค์ํ ์ด์
์ ๊ทผ์ฑ์ ๋จ์ํ ๊ท์ ์ค์์ ๊ดํ ๊ฒ์ด ์๋๋ผ, ๋ชจ๋์๊ฒ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ํดํ์ ์ ๊ทผ์ฑ์ด ํ๋ณด๋์ง ์์ผ๋ฉด ์คํฌ๋ฆฐ ๋ฆฌ๋, ํค๋ณด๋ ํ์, ์์ฑ ์ ๋ ฅ๊ณผ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ์ ์์กดํ๋ ์ฌ์ฉ์๊ฐ ๋ฐฐ์ ๋ ์ ์์ต๋๋ค. ๋ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์:
- ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์: ํดํ์ด ์ ์ ํ๊ฒ ๋งํฌ์ ๋์ง ์์ผ๋ฉด ์คํฌ๋ฆฐ ๋ฆฌ๋๊ฐ ๊ทธ ์กด์ฌ๋ ๋ด์ฉ์ ์๋ ค์ฃผ์ง ์์ ์ ์์ต๋๋ค.
- ํค๋ณด๋ ์ฌ์ฉ์: ํดํ์ด ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ธ์ ๋๋ง ๋ํ๋๋ค๋ฉด ํค๋ณด๋ ์ฌ์ฉ์๋ ์ ๊ทผํ ์ ์์ต๋๋ค.
- ์ด๋ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์: ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค์ผ ํ๋ ์ ๋ฐํ ์์ง์์ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
- ์ธ์ง ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์: ํ์ด๋ฐ์ด ์ข์ง ์๊ฑฐ๋ ํผ๋์ค๋ฌ์ด ํดํ์ ์ข์ ๊ฐ์ ์ ๋ฐํ๊ณ ์ดํด๋ฅผ ๋ฐฉํดํ ์ ์์ต๋๋ค.
์ ๊ทผ์ฑ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ํดํ์ด ๋ชจ๋ ์ฌ์ฉ์์ ๊ฒฝํ์ ๋ฐฉํดํ๋ ๋์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์ ๊ทผ์ฑ ์๋ ํดํ์ ํต์ฌ ์์น
๋ค์ ์์น๋ค์ ์ ๊ทผ์ฑ ์๋ ํดํ์ ๋ง๋๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค:
- ๋์ฒด ์ ๊ทผ ๋ฐฉ๋ฒ ์ ๊ณต: ํดํ์ด ํธ๋ฒ์ ํค๋ณด๋ ํฌ์ปค์ค ๋ชจ๋๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค.
- ARIA ์์ฑ ์ฌ์ฉ: ARIA(Accessible Rich Internet Applications) ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ณด์กฐ ๊ธฐ์ ์ ํดํ์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ณํ๊ณ ์ค๋ช ํด์ผ ํฉ๋๋ค.
- ํฌ์ปค์ค ๊ด๋ฆฌ: ํดํ์ด ํ์๋๊ณ ์จ๊ฒจ์ง ๋ ํฌ์ปค์ค๊ฐ ์ด๋๋ก ๊ฐ๋์ง ์ ์ดํด์ผ ํฉ๋๋ค.
- ์ถฉ๋ถํ ๋๋น ๋ณด์ฅ: ํดํ ํ ์คํธ์ ๋ฐฐ๊ฒฝ ์ฌ์ด์ ์ถฉ๋ถํ ์์ ๋๋น๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- ์ถฉ๋ถํ ์๊ฐ ํ์ฉ: ์ฌ์ฉ์๊ฐ ํดํ ๋ด์ฉ์ ์ฝ์ ์ถฉ๋ถํ ์๊ฐ์ ์ฃผ์ด์ผ ํฉ๋๋ค.
- ๋ซ์ ์ ์๋๋ก ๋ง๋ค๊ธฐ: ํดํ์ ๋ซ์ ์ ์๋ ๋ช ํํ ๋ฐฉ๋ฒ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
- ๊ณผ๋ํ ์ฌ์ฉ ํผํ๊ธฐ: ํดํ์ ๊ผญ ํ์ํ ๋๋ง ์๊ปด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ตฌํ ๊ธฐ๋ฒ
1. ํธ๋ฒ(Hover)์ ํฌ์ปค์ค(Focus) ์ฌ์ฉํ๊ธฐ
์ ๊ทผ์ฑ ์๋ ํดํ์ ๊ฐ์ฅ ์ค์ํ ์ธก๋ฉด์ ๋ง์ฐ์ค์ ํค๋ณด๋ ์ฌ์ฉ์ ๋ชจ๋๊ฐ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ํดํ์ ํธ๋ฒ ์ํ์ ์์๊ฐ ํฌ์ปค์ค๋ฅผ ๋ฐ์์ ๋ ๋ชจ๋ ๋ํ๋์ผ ํฉ๋๋ค.
HTML:
<a href="#" aria-describedby="tooltip-example">Example Link</a>
<div id="tooltip-example" role="tooltip" style="display: none;">This is an example tooltip.</div>
CSS:
a:hover + div[role="tooltip"],
a:focus + div[role="tooltip"] {
display: block;
position: absolute;
background-color: #f0f0f0;
border: 1px solid #ccc;
padding: 5px;
z-index: 1000; /* Ensure the tooltip is on top */
}
์ค๋ช :
aria-describedby
: ์ด ์์ฑ์ ๋งํฌ์ ํดํ ์์๋ฅผ ID๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐํฉ๋๋ค. ์ด๋ ๋ณด์กฐ ๊ธฐ์ ์ ํดํ์ด ๋งํฌ์ ๋ํ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค.role="tooltip"
: ์ด ARIA ์ญํ ์ ํด๋น ์์๋ฅผ ํดํ์ผ๋ก ์๋ณํฉ๋๋ค.- CSS๋ ์ธ์ ํ์ ์ ํ์(
+
)๋ฅผ ์ฌ์ฉํ์ฌ ๋งํฌ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ํฌ์ปค์ค๊ฐ ๋์์ ๋ ํดํ์ ํ์ํฉ๋๋ค.
JavaScript (๊ณ ๊ธ ์ ์ด - ์ ํ ์ฌํญ):
CSS๊ฐ ๊ฐ๋จํ ํ์/์จ๊น์ ์ฒ๋ฆฌํ ์ ์์ง๋ง, JavaScript๋ฅผ ์ฌ์ฉํ๋ฉด ํนํ ํดํ์ด ๋์ ์ผ๋ก ์์ฑ๋๊ฑฐ๋ ๋ ๋ณต์กํ ๋์์ด ํ์ํ ๋ ๋์ฑ ๊ฐ๋ ฅํ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
const link = document.querySelector('a[aria-describedby="tooltip-example"]');
const tooltip = document.getElementById('tooltip-example');
link.addEventListener('focus', () => {
tooltip.style.display = 'block';
});
link.addEventListener('blur', () => {
tooltip.style.display = 'none';
});
link.addEventListener('mouseover', () => {
tooltip.style.display = 'block';
});
link.addEventListener('mouseout', () => {
tooltip.style.display = 'none';
});
2. ARIA ์์ฑ ์ฌ์ฉํ๊ธฐ
ARIA ์์ฑ์ ๋ณด์กฐ ๊ธฐ์ ์ ์๋ฏธ๋ก ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ฃผ์ ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
aria-describedby
: ์์ ์ธ๊ธํ๋ฏ์ด, ์ด ์์ฑ์ ํธ๋ฆฌ๊ฑฐ ์์์ ํดํ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํฉ๋๋ค.role="tooltip"
: ์ด ์์ฑ์ ์์๋ฅผ ํดํ์ผ๋ก ๋ช ์์ ์ผ๋ก ์ ์ํฉ๋๋ค.aria-hidden="true"
/aria-hidden="false"
: ์ด๋ฅผ ์ฌ์ฉํ์ฌ ํดํ์ด ํ์ฌ ๋ณด์กฐ ๊ธฐ์ ์ ๋ณด์ด๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ ๋๋ค. ํดํ์ด ์จ๊ฒจ์ ธ ์์ ๋๋aria-hidden="true"
๋ก ์ค์ ํ๊ณ , ๋ณด์ผ ๋๋aria-hidden="false"
๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ํนํ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ํดํ์ ๊ฐ์์ฑ์ ์ ์ดํ ๋ ์ค์ํฉ๋๋ค.
์์:
<button aria-describedby="help-tooltip">Submit</button>
<div id="help-tooltip" role="tooltip" aria-hidden="true">Click here to submit the form.</div>
JavaScript (aria-hidden์ฉ):
const button = document.querySelector('button[aria-describedby="help-tooltip"]');
const tooltip = document.getElementById('help-tooltip');
button.addEventListener('focus', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('blur', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
button.addEventListener('mouseover', () => {
tooltip.setAttribute('aria-hidden', 'false');
tooltip.style.display = 'block';
});
button.addEventListener('mouseout', () => {
tooltip.setAttribute('aria-hidden', 'true');
tooltip.style.display = 'none';
});
3. ํฌ์ปค์ค ๊ด๋ฆฌํ๊ธฐ
ํดํ์ด ๋ํ๋ ๋, ์ผ๋ฐ์ ์ผ๋ก ํธ๋ฆฌ๊ฑฐ ์์์์ ํฌ์ปค์ค๋ฅผ ๋นผ์์์๋ *์ ๋ฉ๋๋ค*. ํฌ์ปค์ค๋ ํดํ์ ํธ๋ฆฌ๊ฑฐํ ์์์ ๊ทธ๋๋ก ๋จ์ ์์ด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํค๋ณด๋ ์ฌ์ฉ์๊ฐ ์๊ธฐ์น ์์ ์ค๋จ ์์ด ํ์ด์ง ํ์์ ๊ณ์ํ ์ ์์ต๋๋ค.
ํ์ง๋ง, ํนํ ํดํ์ ์ํธ์์ฉ ๊ฐ๋ฅํ ์์(์: ๋งํฌ, ๋ฒํผ)๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ, ํฌ์ปค์ค๋ฅผ ํดํ์ผ๋ก ์ฎ๊ธฐ๊ณ ์ถ์ ๋๊ฐ ์์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ ํ์ธํด์ผ ํฉ๋๋ค:
- ํดํ์ด ํฌ์ปค์ค๋ฅผ ๋ฐ์์์ ๋ํ๋ด๊ธฐ ์ํด ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ณ๋์ด์ผ ํฉ๋๋ค.
- ์๋ ํธ๋ฆฌ๊ฑฐ ์์๋ก ํฌ์ปค์ค๋ฅผ ๋๋๋ฆด ๋ช ํํ ๋ฐฉ๋ฒ(์: ํดํ ๋ด ๋ซ๊ธฐ ๋ฒํผ)์ด ์์ด์ผ ํฉ๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ๋จ์์ฑ๊ณผ ์ฌ์ฉ์ฑ์ ์ํด ํดํ ์์ฒด ๋ด์์ ํฌ์ปค์ค ๊ด๋ฆฌ๋ฅผ ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
4. ์ถฉ๋ถํ ๋๋น ๋ณด์ฅํ๊ธฐ
์์ ๋๋น๋ ๊ฐ๋ ์ฑ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ํดํ์ ํ ์คํธ ์์์ด ๋ฐฐ๊ฒฝ์๊ณผ ์ถฉ๋ถํ ๋๋น๋ฅผ ์ด๋ฃจ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. WCAG(Web Content Accessibility Guidelines)๋ ์ผ๋ฐ ํ ์คํธ์ ๊ฒฝ์ฐ ์ต์ 4.5:1, ํฐ ํ ์คํธ(18pt ๋๋ 14pt ๊ตต๊ฒ)์ ๊ฒฝ์ฐ 3:1์ ๋ช ์๋น๋ฅผ ๊ถ์ฅํฉ๋๋ค.
์จ๋ผ์ธ ๋ช ์๋น ๊ฒ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํํ ์์์ด ์ ๊ทผ์ฑ ํ์ค์ ์ถฉ์กฑํ๋์ง ํ์ธํ์ธ์. ๋ช ์๋น ๊ฒ์ฌ๊ธฐ์ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- WebAIM Contrast Checker: https://webaim.org/resources/contrastchecker/
- Coolors: https://coolors.co/contrast-checker
์์ (์ข์ ๋๋น):
.tooltip {
background-color: #000;
color: #fff;
}
์์ (๋์ ๋๋น):
.tooltip {
background-color: #fff;
color: #eee;
}
5. ์ถฉ๋ถํ ์๊ฐ ํ์ฉํ๊ธฐ
์ฌ์ฉ์๋ ํดํ ๋ด์ฉ์ ์ฝ์ ์ถฉ๋ถํ ์๊ฐ์ด ํ์ํฉ๋๋ค. ๋๋ฌด ๋นจ๋ฆฌ ์ฌ๋ผ์ง๋ ํดํ์ ํผํด์ผ ํฉ๋๋ค. ์ ํด์ง ์ซ์๋ ์์ง๋ง, ์ต์ ๋ช ์ด์ ํ์ ์๊ฐ์ ๋ชฉํ๋ก ํ์ธ์. ๋ํ, ์ฌ์ฉ์๊ฐ ํธ๋ฆฌ๊ฑฐ ์์ ์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ํฌ์ปค์ค๋ฅผ ๋ง์ถ๊ณ ์๋ ๋์์๋ ํดํ์ด ๊ณ์ ํ์๋์ด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ์ด๋ฒคํธ๋ก ์ธํด ํดํ์ ๋ซ์์ผ ํ๋ ๊ฒฝ์ฐ, ํดํ์ด ๋ซํ ๊ฒ์ด๋ผ๋ ํ์๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
ํดํ ๋ด์ฉ์ด ๊ธด ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ์๋์ผ๋ก ํดํ์ ๋ซ์ ์ ์๋ ๋ฐฉ๋ฒ(์: ๋ซ๊ธฐ ๋ฒํผ ๋๋ Escape ํค ๋๋ฅด๊ธฐ)์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
6. ๋ซ์ ์ ์๋๋ก ๋ง๋ค๊ธฐ
ํดํ์ ์ฌ์ฉ์๊ฐ ๋ง์ฐ์ค๋ฅผ ๋ฉ๋ฆฌ ์ฎ๊ธฐ๊ฑฐ๋ ํฌ์ปค์ค๋ฅผ ์ ๊ฑฐํ๋ฉด ์๋์ผ๋ก ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ํนํ ๋ด์ฉ์ด ๊ธธ๊ฑฐ๋ ์ํธ์์ฉ ์์๊ฐ ํฌํจ๋ ํดํ์ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ซ์ ์ ์๋ ๋ช ํํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํดํ ๋ซ๊ธฐ ๋ฐฉ๋ฒ:
- ๋ซ๊ธฐ ๋ฒํผ: ํดํ ๋ด์ ์๊ฐ์ ์ผ๋ก ๋์ ๋๋ ๋ซ๊ธฐ ๋ฒํผ์ ํฌํจํฉ๋๋ค.
- Escape ํค: ์ฌ์ฉ์๊ฐ Escape ํค๋ฅผ ๋๋ฌ ํดํ์ ๋ซ์ ์ ์๋๋ก ํ์ฉํฉ๋๋ค.
- ์ธ๋ถ ํด๋ฆญ: ์ฌ์ฉ์๊ฐ ํดํ๊ณผ ํธ๋ฆฌ๊ฑฐ ์์ ์ธ๋ถ์ ์๋ฌด ๊ณณ์ด๋ ํด๋ฆญํ๋ฉด ํดํ์ ๋ซ์ต๋๋ค. (๋ฐฉํด๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค).
์์ (๋ซ๊ธฐ ๋ฒํผ):
<div id="my-tooltip" role="tooltip" aria-hidden="true">
This is my tooltip content.
<button onclick="hideTooltip()">Close</button>
</div>
์์ (Escape ํค):
document.addEventListener('keydown', function(event) {
if (event.key === 'Escape') {
hideTooltip(); // Replace with your actual hide tooltip function
}
});
7. ๊ณผ๋ํ ์ฌ์ฉ ํผํ๊ธฐ
ํดํ์ ์๊ปด์ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ์ ๋ง๋ก ์ ์ฉํ ์ ๋ณด๋ฅผ ์ ๊ณตํ ๋๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. ํดํ์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ธํฐํ์ด์ค๊ฐ ๋ณต์กํด์ง๊ณ ์ฌ์ฉ์์ ์ฃผ์๋ฅผ ์ฐ๋งํ๊ฒ ํ๋ฉฐ ์ค๋ง์ค๋ฌ์ด ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค.
ํดํ์ ๋์:
- ๋ช ํํ ๋ ์ด๋ธ: ์์ ํ๋, ๋ฒํผ, ๋งํฌ์ ๋ช ํํ๊ณ ์ค๋ช ์ ์ธ ๋ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค.
- ์ํฉ๋ณ ๋์๋ง: ๊ด๋ จ ์์ ๊ทผ์ฒ์ ์ธํฐํ์ด์ค ๋ด์ ์ง์ ๋์๋ง ํ ์คํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋์๋ง ๋ฌธ์: ๋ ๋ณต์กํ ๊ธฐ๋ฅ์ ๋ํด์๋ ํฌ๊ด์ ์ธ ๋์๋ง ๋ฌธ์๋ก ๋งํฌํฉ๋๋ค.
๊ณ ๊ธ ๊ณ ๋ ค์ฌํญ
๋์ ์ฝํ ์ธ
ํดํ ์ฝํ
์ธ ๊ฐ ๋์ ์ผ๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ(์: API์์ ๋ก๋๋๊ฑฐ๋ ์ฌ์ฉ์ ์
๋ ฅ์ ๋ฐ๋ผ ์
๋ฐ์ดํธ๋๋ ๊ฒฝ์ฐ), aria-describedby
์์ฑ๊ณผ ํดํ ๊ฐ์์ฑ์ด ๊ทธ์ ๋ฐ๋ผ ์
๋ฐ์ดํธ๋๋๋ก ํด์ผ ํฉ๋๋ค. JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ์
๋ฐ์ดํธ๋ฅผ ๊ด๋ฆฌํ์ธ์.
์์น ์ง์
ํดํ์ ์์น๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํ์ธ์. ์ค์ํ ์ฝํ ์ธ ๋ฅผ ๊ฐ๋ฆฌ๊ฑฐ๋ ๋ ์ด์์ ๋ณ๊ฒฝ์ ์ ๋ฐํ๋ ๋ฐฉ์์ผ๋ก ๋ฐฐ์นํ์ง ๋ง์ธ์. ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ํด์๋๋ฅผ ์ผ๋์ ๋๊ณ CSS๋ฅผ ์ฌ์ฉํ์ฌ ํดํ์ด ํญ์ ๋ทฐํฌํธ ๋ด์ ํ์๋๋๋ก ํ์ธ์.
๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ
ํดํ์ ์ ํต์ ์ผ๋ก ํธ๋ฒ ์ํธ์์ฉ์ ์์กดํ๋๋ฐ, ์ด๋ ํฐ์น ๊ธฐ๋ฐ ์ฅ์น์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ฐ์ผ ์ฅ์น์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๋์ฒด ์ํธ์์ฉ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์:
- ํญ(Tap): ์ฌ์ฉ์๊ฐ ์์๋ฅผ ํญํ๋ฉด ํดํ์ ํ์ํฉ๋๋ค.
- ๊ธธ๊ฒ ๋๋ฅด๊ธฐ(Long press): ์ฌ์ฉ์๊ฐ ์์๋ฅผ ๊ธธ๊ฒ ๋๋ฅด๋ฉด ํดํ์ ํ์ํฉ๋๋ค.
- ํฌ์ปค์ค ์ ํ์: ์์๊ฐ ํฌ์ปค์ค๋ฅผ ๋ฐ์ ๋ ํ์ํฉ๋๋ค. ์ด๋ JavaScript๋ฅผ ์ฌ์ฉํ์ฌ ํฐ์น ์ง์ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ (์:
('ontouchstart' in window)
) ๊ทธ์ ๋ฐ๋ผ ํ์ ๋์์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
ํดํ ํ ์คํธํ๊ธฐ
ํดํ์ด ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ์ง ์ฒ ์ ํ ํ ์คํธํ์ธ์. ์๋ ํ ์คํธ์ ์๋ํ๋ ์ ๊ทผ์ฑ ํ ์คํธ ๋๊ตฌ๋ฅผ ์กฐํฉํ์ฌ ์ฌ์ฉํ์ธ์.
ํ ์คํธ ๋ฐฉ๋ฒ:
- ํค๋ณด๋ ํ์: ํค๋ณด๋๋ฅผ ์ฌ์ฉํ์ฌ ํดํ์ ์ ๊ทผํ ์ ์๋์ง ํ์ธํฉ๋๋ค.
- ์คํฌ๋ฆฐ ๋ฆฌ๋ ํ ์คํธ: ์คํฌ๋ฆฐ ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ์ฌ ํดํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ด๋๋์ง ํ์ธํฉ๋๋ค.
- ์์ ๋๋น ๋ถ์: ์์ ๋๋น ๊ฒ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ถฉ๋ถํ ๋๋น๋ฅผ ํ์ธํฉ๋๋ค.
- ๋ชจ๋ฐ์ผ ํ ์คํธ: ๋ค์ํ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์ ํ๋ฉด ํฌ๊ธฐ์์ ํดํ์ ํ ์คํธํฉ๋๋ค.
- ์๋ํ๋ ์ ๊ทผ์ฑ ํ ์คํธ: axe DevTools, WAVE ๋๋ Lighthouse์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์ ๊ทผ์ฑ ๋ฌธ์ ๋ฅผ ์๋ณํฉ๋๋ค.
๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n)
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ํดํ์ ๊ฐ๋ฐํ ๋๋ ๊ตญ์ ํ ๋ฐ ํ์งํ๋ฅผ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค:
- ํ
์คํธ ๋ฐฉํฅ: ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ(LTR) ๋ฐ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ(RTL) ํ
์คํธ ๋ฐฉํฅ์ ๋ชจ๋ ์ง์ํฉ๋๋ค. ๋ ์ด์์์๋ ๋ฌผ๋ฆฌ์ ์์ฑ(์:
margin-left
,margin-right
) ๋์ CSS ๋ ผ๋ฆฌ์ ์์ฑ(์:margin-inline-start
,margin-inline-end
)์ ์ฌ์ฉํฉ๋๋ค. - ์ธ์ด๋ณ ๋ฒ์ญ: ๋ค์ํ ์ธ์ด์ ๋ํ ํดํ ์ฝํ ์ธ ๋ฒ์ญ์ ์ ๊ณตํฉ๋๋ค.
- ๋ ์ง ๋ฐ ์๊ฐ ํ์: ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ง๊ฒ ๋ ์ง ๋ฐ ์๊ฐ ํ์์ ์กฐ์ ํฉ๋๋ค.
- ์ซ์ ํ์: ๋ค๋ฅธ ์ง์ญ์ ๋ง๋ ์ ์ ํ ์ซ์ ํ์(์: ์์์ ๊ตฌ๋ถ ๊ธฐํธ, ์ฒ ๋จ์ ๊ตฌ๋ถ ๊ธฐํธ)์ ์ฌ์ฉํฉ๋๋ค.
๊ฒฐ๋ก
์ ๊ทผ์ฑ ์๋ ํดํ์ ๊ตฌํํ๋ ค๋ฉด ์ ์คํ ๊ณํ๊ณผ ์ธ๋ถ ์ฌํญ์ ๋ํ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ์์น๊ณผ ๊ธฐ๋ฒ์ ๋ฐ๋ฅด๋ฉด ๋ฅ๋ ฅ์ ๊ด๊ณ์์ด ๋ชจ๋ ์ฌ๋์ด ์ฌ์ฉํ ์ ์๋ ํดํ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ ๊ทผ์ฑ์ ์ง์์ ์ธ ๊ณผ์ ์ด๋ฏ๋ก, ๋ชจ๋ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ํดํ์ ๊ณ์ ํ ์คํธํ๊ณ ๊ฐ์ ํด์ผ ํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์.